void solve()
{
  int n, q;
  cin >> n >> q;

  string s;
  cin >> s;
  s = " " + s;

  vector<set<int>> f(3);
  auto add = [&](int i, int j) {
    if (s[i] == '(' && s[j] == '(') {
      f[0].insert(i);
    }
    if (s[i] == ')' && s[j] == ')') {
      f[1].insert(i);
    }
    if (s[i] == ')' && s[j] == '(') {
      f[2].insert(i);
    }
  };

  auto del = [&](int i, int j) {
    if (s[i] == '(' && s[j] == '(') {
      f[0].erase(i);
    }
    if (s[i] == ')' && s[j] == ')') {
      f[1].erase(i);
    }
    if (s[i] == ')' && s[j] == '(') {
      f[2].erase(i);
    }
  };

  rep(i, 1, n) {
    if (i % 2 == 1 && i + 1 <= n) {
      add(i, i + 1);
    }
  }

  while (q--) {
    int x;
    cin >> x;
    
    if (n & 1) {
      cout << "NO\n";
    } else {
      int p = x - (x % 2 == 0);
      if (p + 1 <= n) {
        del(p, p + 1);
      }
      if (s[x] == '(') {
        s[x] = ')';
      } else {
        s[x] = '(';
      }
      if (p + 1 <= n) {
        add(p, p + 1);
      }

      bool flag = false;
      if (s[1] != '(' || s[n] != ')') {
        flag = true;
      }
      if (f[0].empty() && !f[1].empty()) {
        flag = true;
      } else if (!f[0].empty() && f[1].empty()) {
        flag = true;
      } else if (!f[0].empty() && !f[1].empty()) {
        if ((*(f[0].begin()) > *(f[1].begin())) || (*(f[0].rbegin()) > *(f[1].rbegin()))) {
          flag = true;
        }
        if (!f[2].empty() && (*(f[2].begin()) < *(f[0].begin()) || *(f[2].rbegin()) > *(f[1].rbegin()))) {
          flag = true;
        }
      } else {
        if (!f[2].empty()) {
          flag = true;
        }
      }
      if (flag) {
        cout << "NO\n";
      } else {
        cout << "YES\n";
      }
    }
  }
}